package cn.oder.exchange;

import cn.oder.Sorted;
import cn.oder.SortedBase;
import cn.oder.enums.Sore;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 类简介: 冒泡排序
 * 时间复杂度是O（n^2）,最优为 O（n）时间复杂度为O(1),稳定的
 *
 * @Author: ShangGuan
 * @Time: 2024/05/17
 **/
public class BubbleSorted extends SortedBase implements Sorted {
    public BubbleSorted(Sore sore, List<Integer> arr) {
        super(sore, arr);
    }

    public BubbleSorted(List<Integer> arr) {
        super(arr);
    }

    public static void main(String[] args) {
        int[] arr = {3, 5, 1, 4, 2, 1, 124, 123, 54, 12, 36, 54, 1231, 543, 1, 3134, 214523, 13};
//        Integer[] integers = Arrays.stream(arr).boxed().toArray(Integer[]::new);
        List<Integer> integerList = Arrays.stream(arr).boxed().collect(Collectors.toList());
        BubbleSorted bubbleSorted = new BubbleSorted(integerList);

        System.out.println(bubbleSorted.sort());
    }


    @Override
    public List<Integer> sort() {
        boolean flag = false;
        for (int i = 0; i < arr.size(); i++) {
            for (int j = 0; j < arr.size() - 1 - i; j++) {
                //将前一个比后一个大的两元素进行交换
                if (arr.get(j) > arr.get(j + 1)&&sore.equals(Sore.ASC)) {
                    int tmp = arr.get(j);
                    arr.set(j, arr.get(j + 1));
                    arr.set(j + 1, tmp);
                    flag = true;
                }
                if(arr.get(j) < arr.get(j + 1)&&sore.equals(Sore.DESC)){
                    int tmp = arr.get(j);
                    arr.set(j, arr.get(j + 1));
                    arr.set(j + 1, tmp);
                    flag = true;
                }
            }
            if (!flag) {
                return arr;
            }
        }
        return arr;
    }
}
